option and_then, map, or_else

let something: Option<i32> = Some(100);
let mapped_ok: Option<i32> = something.map(|i| i / 10);
// divided by 0 문제를 해소해 주는 `checked_div`는 Option을 리턴한다. 따라서 `Option`이 두 번 씌워지게 되는데, 이는 우리가 원하는 방식이 아니다.
let mapped_no: Option<Option<i32>> = something.map(|i| i.checked_div(0));
let solution: Option<i32> = something.and_then(|i| i.checked_div(0));
struct Node {
	next: Option<Node>,
	elem: i32,
	// bunch of gunks
}
// peek next
let next_element: Option<Node> = node
	.and_then(|node| node.next)
	.map(|node| node.elem);